import { BuildOptions, defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
// 自动导入vue中hook reactive ref等
import AutoImport from "unplugin-auto-import/vite";

// 自动导入ui-组件 比如说ant-design-vue  element-plus等
import Components from "unplugin-vue-components/vite";
import { ElementPlusResolver } from "unplugin-vue-components/resolvers";

import Icons from "unplugin-icons/vite";
import IconsResolver from "unplugin-icons/resolver";

import { resolve } from "path";
// import legacy from '@vitejs/plugin-legacy'

import postCssPxToRem from "postcss-pxtorem";
import autoprefixer from "autoprefixer";
// 打包分析
// import { visualizer } from 'rollup-plugin-visualizer'
// import { autoComplete, Plugin as importToCDN } from 'vite-plugin-cdn-import';
// 图片压缩
// import viteImagemin from 'vite-plugin-imagemin';
// gzip
import viteCompression from "vite-plugin-compression";

// electron
import electron from "vite-plugin-electron";
import electronRenderer from "vite-plugin-electron-renderer";

import { viteMockServe } from "vite-plugin-mock";
// 预渲染
// import vitePrerender from 'vite-plugin-prerender'
// const Renderer = vitePrerender.PuppeteerRenderer

// import qiankun from 'vite-plugin-qiankun';
// import eslint from 'vite-plugin-eslint'

// const useDevMode = true; // useDevMode = true 时不开启热更新
import { buildConfig } from "./build";
import { createSvgIconsPlugin } from "vite-plugin-svg-icons";

const pathSrc = resolve(__dirname, "src");
// https://vitejs.dev/config/
export default (config) => {
	console.log(config);
	return defineConfig({
		define: {
			"process.env": {}
		},
		base: "./",
		// 本地运行配置，及反向代理配置
		server: {
			cors: true, // 默认启用并允许任何源
			open: false, // 在服务器启动时自动在浏览器中打开应用程序
			port: 3000,
			origin: "http://localhost:3000" // 项目baseUrl，解决主应用中出现静态地址404问题
			// proxy: {
			//   '/api': {
			//     target: 'http://127.0.0.1:9888',
			//     changeOrigin: true,
			//     rewrite: (path) => path.replace(/^\/api/, '')
			//   },
			// },
		},
		plugins: [
			vue(),

			electron({
				entry: ["electron/main.ts", "electron/preload.ts"] // 主进程文件
			}),
			electronRenderer(),

			viteCompression({
				verbose: true,
				disable: false,
				threshold: 10240,
				algorithm: "gzip",
				ext: ".gz"
			}),
			// viteImagemin({
			//   gifsicle: {
			//     optimizationLevel: 7,
			//     interlaced: false,
			//   },
			//   optipng: {
			//     optimizationLevel: 7,
			//   },
			//   mozjpeg: {
			//     quality: 20,
			//   },
			//   pngquant: {
			//     quality: [0.8, 0.9],
			//     speed: 4,
			//   },
			//   svgo: {
			//     plugins: [
			//       {
			//         name: 'removeViewBox',
			//       },
			//       {
			//         name: 'removeEmptyAttrs',
			//         active: false,
			//       },
			//     ],
			//   },
			// }),
			// vitePrerender({
			//   // 要渲染的路由
			//   routes: ['/', '/about'],
			//   // 静态文件目录
			//   staticDir: resolve(__dirname, './dist')
			// }),
			AutoImport({
				resolvers: [ElementPlusResolver(), IconsResolver({})],
				// 安装两行后你会发现在组件中不用再导入ref，reactive等
				imports: ["vue", "vue-router", "pinia", "@vueuse/core"],
				// 存放的位置
				dts: "src/types/auto-import.d.ts",
				eslintrc: {
					enabled: true, // Default `false`
					filepath: "./.eslintrc-auto-import.json", // 生成eslint自动导入的文件 `./.eslintrc-auto-import.json`
					globalsPropValue: true // Default `true`, (true | false | 'readonly' | 'readable' | 'writable' | 'writeable')
				}
			}),
			Components({
				resolvers: [
					ElementPlusResolver({ importStyle: "sass" }),
					IconsResolver({ enabledCollections: ["ep"] })
				],
				// 指定自定义组件位置(默认:src/components)
				dirs: ["src/components", "src/**/components"],
				// 引入组件的,包括自定义组件
				// 存放的位置
				dts: "src/types/components.d.ts"
			}),
			Icons({
				autoInstall: true
			}),
			createSvgIconsPlugin({
				// 指定需要缓存的图标文件夹
				iconDirs: [resolve(pathSrc, "assets/icons")],
				// 指定symbolId格式
				symbolId: "icon-[dir]-[name]"
			}),
			// mockjs：需要注意的是mockPath必须配置
			viteMockServe({
				ignore: /^\_/,
				mockPath: "mock",
				enable: config.mode === "development"
			})

			// legacy({
			//   targets: ['defaults', 'not IE 11'],
			// }),
			// visualizer({
			//   open: true, // 注意这里要设置为true，否则无效
			// }),
			// importToCDN({
			//   prodUrl: 'https://unpkg.com/{name}@{version}/{path}',
			//   modules: [
			//     {
			//       name: 'vue',
			//       var: 'Vue',
			//       path: 'dist/vue.global.prod.js',
			//     },
			//     {
			//       name: 'vue-demi',
			//       var: 'VueDemi',
			//       path: 'lib/index.iife.js',
			//     },
			//     {
			//       name: 'axios',
			//       var: 'axios',
			//       path: 'dist/axios.min.js',
			//     },

			//     {
			//       name: 'vue-router',
			//       var: 'VueRouter',
			//       path: 'dist/vue-router.global.js',
			//     },
			//     {
			//       name: 'element-plus',
			//       var: 'ElementPlus',
			//       path: 'dist/index.full.js',
			//     },
			//     {
			//       name: '@element-plus/icons-vue',
			//       var: 'ElementPlusIconsVue',
			//       path: 'dist/index.iife.min.js',
			//     },
			//     {
			//       name: 'pinia',
			//       var: 'Pinia',
			//       path: 'dist/pinia.iife.js',
			//     },
			//     // {
			//     //   name: 'vue-simple-uploader',
			//     //   var: 'VueSimpleUploader',
			//     //   path: 'dist/vue-simple-uploader.js',

			//     // },
			//   ],
			// }),
			// eslint({ lintOnStart: false, cache: false })
		],

		css: {
			// CSS 预处理器
			preprocessorOptions: {
				// 定义全局 SCSS 变量
				scss: {
					javascriptEnabled: true,
					additionalData: `
							@use "@/styles/variables.scss" as *;
						`
				}
			},
			postcss: {
				plugins: [
					autoprefixer({
						overrideBrowserslist: [
							"Android 4.1",
							"iOS 7.1",
							"Chrome > 31",
							"ff > 31",
							"ie >= 8" // 'last 2 versions', // 所有主流浏览器最近2个版本
						],
						grid: true
					}),
					// postCssPxToRem({
					//   // 自适应，px>rem转换
					//   rootValue: 192, // 1rem的大小
					//   propList: ['*'], // 需要转换的属性，这里选择全部都进行转换
					//   selectorBlackList: ['el'] // 不进行px转换的选择器，不转换element的标签样式，根据自己项目需求来定义
					// }),
					postCssPxToRem({
						// 自适应，px>rem转换
						rootValue: 14, // 1rem的大小
						propList: ["font-size", "--el-font-size-base"] // 需要转换的属性，这里选择全部都进行转换
					})
				]
			}
		},

		// 打包配置
		build: !config.ssrBuild ? (buildConfig as BuildOptions) : {},
		resolve: {
			// 配置路径别名
			alias: {
				"@": resolve(__dirname, "./src")
			}
		}
	});
};
